/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package serverClasses;

import commonClasses.*;
import commonClasses.Authentication.AeSimpleMD5;
import commonClasses.Messages.LoginMsg;
import commonClasses.Messages.NakMsg;
import commonClasses.commonInterfaces.AuthenticationIntf;
import commonClasses.commonInterfaces.HostModelIntf;
import commonClasses.commonInterfaces.ProtocolIntf;

/**
 *
 * @author Pozytywny!
 */
public class LoginMsgService {

    private ProtocolIntf _protocol;
    private HostModelIntf _model;
    private AuthenticationIntf _authentication;

    public LoginMsgService(ProtocolIntf protocol, HostModelIntf hostModel) {
        _protocol = protocol;
        _model = hostModel;
    }

    public String execute() throws Exception {
        //najpierw wczytamy login msg do końca i przemyślimy poprawność
        LoginMsg loginMsg = new LoginMsg(_protocol);
        try {
            loginMsg.receive();
            Utils.write("LoginMsgService, dostałem login msg.");
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

        //jeżeli magic number i version się zgdzają
        //i jego hash da się wygenerować
        //z tego co mamy w modelu
        //to wysyłamy do gościa
        //ze jest zalogowany
        //oraz wysyłamy nasz identyfikator zahaszowany

        if (loginMsg.getMagicNumber() != MagicNumbers.MAGIC_NUMBER ||
                loginMsg.getVersionNumber() != MagicNumbers.VERSION_NUMBER ||
                !_authentication.authenticate(loginMsg.getHash(),
                _model.getRegisteredIdentifiers())) {

            new NakMsg(_protocol, "Dane niezgodne").send();

            Utils.write("LoginMsgService, wysłałem nak.");
            return null;
        } else {

            new LoginMsg(
                    _protocol,
                    AeSimpleMD5.MD5(_model.getHostIdentifier()),
                    MagicNumbers.VERSION_NUMBER).send();
            Utils.write("LoginMsgService, wysłałem login.");
            return loginMsg.getHash();
        }
    }
}
